package com.sanjin.mall.gateway;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

@Configuration
public class MallCorsConfiguration {

    @Bean   // 添加过滤器，当请求一过来走完 corsWebFilter 就给他们添加上跨域的相应配置
    public CorsWebFilter corsWebFilter(){

        // 基于url路径跨域，选择reactive包下的
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 跨域配置信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();

        // 允许跨域的头
        corsConfiguration.addAllowedHeader("*");
        // 允许跨域的请求方式
        corsConfiguration.addAllowedMethod("*");
        // 允许跨域的请求来源
//        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedOriginPattern("*");
        // 是否允许携带cookie跨域
        corsConfiguration.setAllowCredentials(true);
        // 任意url都要进行跨域配置
        //对接口进行配置，“/*”代表所有，“/**”代表适配的所有接口
        source.registerCorsConfiguration("/**",corsConfiguration);
        //CorsWebFilter的构造器需要传递一个
        //org.springframework.web.cors.reactive.CorsConfigurationSource的接口作为参数
        //接口不能实例化，所以选择CorsConfigurationSource的实现类
        //UrlBasedCorsConfigurationSource作为参数
        return new CorsWebFilter(source);
    }
}
